package com.example.demo.word;


import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;

import java.io.InputStream;

public class GenerateTemplateUtils {


    /**
     * 编译表格模板
     * 当需要处理Word模板中的表格，且表格的行数不确定时，使用此方法编译模板
     * 如果没有提供标签名称，则应用默认配置编译模板；否则，将提供的标签名称绑定到循环行表格渲染策略
     *
     * @param template 模板的输入流
     * @param tagNames 可变参数，指定模板中需要处理的标签名称
     * @return 编译后的模板对象
     */
    public static XWPFTemplate compileTableTemplate(InputStream template, String... tagNames) {
        // 如果没有提供标签名称，使用默认配置编译模板
        if (tagNames == null || tagNames.length < 1) {
            return XWPFTemplate.compile(template);
        }

        // 创建循环行表格渲染策略对象
        LoopRowTableRenderPolicy loopRowTableRenderPolicy = new LoopRowTableRenderPolicy();

        // 创建配置构建器对象
        ConfigureBuilder builder = Configure.builder();

        // 遍历提供的标签名称，将每个标签名称绑定到循环行表格渲染策略
        for (String tagName : tagNames) {
            builder.bind(tagName, loopRowTableRenderPolicy);
        }

        // 构建配置对象
        Configure config = builder.build();

        // 使用提供的模板和构建的配置编译模板
        return XWPFTemplate.compile(template, config);
    }

}
